package org.yzhzc.friend.controller.user;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.yzhzc.common.core.constants.HttpConstants;
import org.yzhzc.common.core.controller.BaseController;
import org.yzhzc.common.core.domain.R;
import org.yzhzc.common.core.domain.TableDataInfo;
import org.yzhzc.friend.aspect.CheckUserStatus;
import org.yzhzc.friend.domain.exam.dto.ExamDTO;
import org.yzhzc.friend.domain.exam.dto.ExamQueryDTO;
import org.yzhzc.friend.service.user.IUserExamService;

/**
 * 用户竞赛控制器。
 * 提供用户参与竞赛和查询用户竞赛列表的接口。
 */
@RestController
@RequestMapping("/user/exam")
public class UserExamController extends BaseController {

    @Autowired
    private IUserExamService userExamService; // 用户竞赛服务接口

    /**
     * 用户参与竞赛。
     *
     * @param token   用户 Token，从请求头中获取
     * @param examDTO 竞赛信息，包含竞赛 ID
     * @return 操作结果
     */
    @CheckUserStatus // 检查用户状态的切面注解
    @PostMapping("/enter") // POST 请求，路径为 /user/exam/enter
    public R<Void> enter(
            @RequestHeader(HttpConstants.AUTHENTICATION) String token, // 从请求头中获取用户 Token
            @RequestBody ExamDTO examDTO // 从请求体中获取竞赛信息
    ) {
        // 调用服务层方法，处理用户参与竞赛的逻辑
        return toR(userExamService.enter(token, examDTO.getExamId()));
    }

    /**
     * 查询用户竞赛列表。
     *
     * @param examQueryDTO 竞赛查询条件
     * @return 分页的竞赛列表数据
     */
    @GetMapping("/list") // GET 请求，路径为 /user/exam/list
    public TableDataInfo list(ExamQueryDTO examQueryDTO) {
        // 调用服务层方法，查询用户竞赛列表
        return userExamService.list(examQueryDTO);
    }
}